-- @Author: baidwwy
-- @Date:   2018-05-04 07:10:50
-- @Last Modified by:   baidwwy
-- @Last Modified time: 2018-05-04 07:35:21
local __LuaShader = require("gge.shader")
local GGELUA = class(require"gge引用")

-- /// PixelShader版本
-- enum PIXEL_SHADER_VERSION
-- {
--     PS_NONE,    ///< 不支持PixelShader
--     PS_1_1,     ///< ps1.1
--     PS_1_2,     ///< ps1.2
--     PS_1_3,     ///< ps1.3
--     PS_1_4,     ///< ps1.4
--     PS_2_0,     ///< ps2.0
--     PS_LAST,
--     PS_FORCE32BIT = 0x7FFFFFFF,
-- };
function GGELUA:初始化(var,fun,psVersion)
    self._obj = __LuaShader()
    if #var<256 then
        self._obj:Shader_Load(var,fun,psVersion or 1)
    else
        self._obj:Shader_Create(var,fun,psVersion or 1)
    end
end

-- /// 纹理状态
-- enum TEXTURE_STATE
-- {
--     TEXSTATE_WRAP       = 1,    ///< 重叠映射寻址
--     TEXSTATE_MIRROR     = 2,    ///< 镜像纹理寻址
--     TEXSTATE_CLAMP      = 3,    ///< 夹取纹理寻址
--     TEXSTATE_BORDER     = 4,    ///< 边框颜色寻址
--     TEXSTATE_FILTER     = 8,    ///< 纹理过滤，可以与寻址参数用"|"结合使用
--     TEXSTATE_FORCE32BIT = 0x7FFFFFFF,
-- };
function GGELUA:置纹理(name,tex,texState)
    return self._obj:SetTexture(name,tex:取指针(),texState or 1)
end
-- @brief 设置纹理，调用Graph_SetCurrentShader()函数设置为当前Shader后该函数生效
-- @param startRegister 起始寄存器
-- @param tex 纹理
-- @param texState 纹理状态
-- @param borderColor 边框颜色寻址所用的边框颜色
-- @return 成功返回true，失败返回false
function GGELUA:置纹理扩展(startRegister,tex,texState,borderColor)
    return self._obj:SetTextureEx(startRegister,tex:取指针(),texState or 1,borderColor or 0)
end
function GGELUA:置变量(name,f)
    return self._obj:SetFloat(name,f)
end
function GGELUA:置变量数组(name,pf)
    local ptr = ffi.new('float[?]',#pf,pf)
    return self._obj:SetFloat(name,ptr,#pf)
end
function GGELUA:置变量扩展(startRegister,f)
    return self._obj:SetFloatEx(startRegister,f)
end
function GGELUA:置变量数组扩展(startRegister,pf)
    local ptr = ffi.new('float[?]',#pf,pf)
    return self._obj:SetFloatArrayEx(startRegister,ptr,#pf)
end
return GGELUA